package com.ddy.test;

public class HelixNumber {
    public static void main(String[] args) {
        int num = 9;
        int[][] array = new int[num][num];
        int di = 0, dj = 1;//方向
        int i = 0, j = 0;//坐标
        for (int val = 1; val <= num * num; val++) {
            array[i][j] = val;
            //System.out.println(i + ", " + j + "-->" + val);
            if (val <= 4 * (num - 1)) {//画外圈
                if (j == num - 1) {//turn down
                    di = 1;dj = 0;
                }
                if (i == num - 1) {//turn left
                    di = 0;dj = -1;
                }
                if (j == 0 && val > 3 * (num - 1)) {//turn up
                    di = -1;dj = 0;
                }
                if (val == 4 * (num - 1)) {//turn right
                    di = 0;dj = 1;
                }
            } else {//画内圈
                if (di == 0 && dj == 1 && array[i][j + 1] > 0) { //turn down
                    di = 1;dj = 0;
                }
                if (di == 1 && dj == 0 && array[i + 1][j] > 0) { //turn left
                    di = 0;dj = -1;
                }
                if (di == 0 && dj == -1 && array[i][j - 1] > 0) {//turn up
                    di = -1;dj = 0;
                }
                if (di == -1 && dj == 0 && array[i - 1][j] > 0) { //turn right
                    di = 0;dj = 1;
                }
            }
            i += di;
            j += dj;
        }
        for (i = 0; i < num; i++) {
            for (j = 0; j < num; j++) {
                System.out.print(String.format("%2d ", array[i][j]));
            }
            System.out.println();
        }
    }
}
